/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siagefi.mb;

import br.siagefi.model.Perfil;
import br.siagefi.model.Usuario;
import br.siagefi.service.PerfilService;
import br.siagefi.service.UsuarioService;
import br.siagefi.util.FacesUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author Paulo Lavarini
 */
@SessionScoped
@ManagedBean
public class UsuarioBean implements Serializable {

    private Usuario usuario;
    private final UsuarioService service;
    private List<Usuario> usuarios;

    private String confereSenha;

    public UsuarioBean() {
        this.usuario = new Usuario();
        this.service = new UsuarioService();
        this.usuarios = new ArrayList<>();
        this.listar();
    }

    // navegação
    
    //template
    public String gerenciarUsuario(){
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("usuarioBean");
        return"/pages/users/administrador/usuario";
    }
    
    public String alterar(Usuario usuario) {
        this.setUsuario(usuario);
        return "incluirUsuario";
    }

    public String voltarParaFuncionario() {
        this.limpar();
        return "funcionario";
    }
    
    public String limpar(){
        this.setUsuario(new Usuario());
        this.setUsuarios(new ArrayList<Usuario>());
        return "usuario";
    }

    // persistência
    public void gravar() {
        if (this.getUsuario().getId() == null) {
            //incluir
            if (service.jaExiste(this.getUsuario())) {
                FacesUtil.addErrorMessage("Usuario já cadastrado.");
            } else if (usuario.getSenha() == null ? confereSenha == null : usuario.getSenha().equals(confereSenha)) {
                service.inserir(this.getUsuario());
                FacesUtil.addSuccessMessage("Usuario incluido com sucesso!");
            } else {
                FacesUtil.addErrorMessage("As senhas não conferem!.");
            }
        } else {
            //alterar
            service.alterar(this.getUsuario());
            FacesUtil.addSuccessMessage("Usuario alterado com sucesso!");
        }
        this.listar();
    }

    public void remover(Usuario usuario) {
        service.remover(usuario);
        FacesUtil.addSuccessMessage("Usuario excluido com sucesso!");
        this.listar();
    }

    public final void listar() {
        this.usuarios = service.listar();
    }

    //Comparar senha e salvar
    public void alterarSenha() {
        if (usuario.getSenha() == null ? confereSenha == null : usuario.getSenha().equals(confereSenha)) {
            service.inserir(this.getUsuario());
            FacesUtil.addSuccessMessage("Usuario incluido com sucesso!");
        } else {
            FacesUtil.addErrorMessage("As senhas não conferem!.");
        }
        this.listar();
    }

    // listas
    public List<Perfil> getPerfis(){
         return new PerfilService().listar();
    }

    // getters e setters
    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public String getConfereSenha() {
        return confereSenha;
    }

    public void setConfereSenha(String confereSenha) {
        this.confereSenha = confereSenha;
    }

}
